From 89ed067cfd2c86fcaac3dedd55d3fab785f82e94 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 20 May 2011 08:54:45 +0100 Subject: [PATCH] x86: clear CPUID output of leaf 0xd for Dom0 when xsave is disabled Linux starting with 2.6.36 uses the XSAVEOPT instruction and has certain code paths that look only at the feature bit reported through CPUID leaf 0xd sub-leaf 1 (i.e. without qualifying the check with one evaluating leaf 4 output). Consequently the hypervisor ought to mimic actual hardware in clearing leaf 0xd output when not supporting xsave. Signed-off-by: Jan Beulich --- xen/arch/x86/traps.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index fc4ad84202..b6daf0f66d 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -837,6 +837,10 @@ static void pv_cpuid(struct cpu_user_regs *regs) __clear_bit(X86_FEATURE_NODEID_MSR % 32, &c); __clear_bit(X86_FEATURE_TOPOEXT % 32, &c); break; + case 0xd: /* XSAVE */ + if ( xsave_enabled(current) ) + break; + /* fall through */ case 5: /* MONITOR/MWAIT */ case 0xa: /* Architectural Performance Monitor Features */ case 0x8000000a: /* SVM revision and features */ -- 2.30.2